package core

import (
	"context"
	"net"
)

// ScanResult 表示单个IP扫描的结果
type ScanResult struct {
	IP         net.IP
	Status     ScanStatus
	CanSudo    bool
	PortOpen   bool
	RootAccess bool
	Error      error
}

// ScanStatus 表示扫描状态
type ScanStatus int

const (
	StatusUnknown ScanStatus = iota
	StatusSuccess
	StatusPortFailed
	StatusAuthFailed
	StatusPortOpen
	StatusRootAccess
)

// Scanner 定义了SSH扫描器的接口
type Scanner interface {
	// Initialize 初始化扫描器
	Initialize(ctx context.Context) error

	// Run 运行扫描并返回结果
	// 返回值：成功列表、sudo列表、端口失败列表、认证失败列表、错误
	Run(ctx context.Context) ([]string, []string, []string, []string, error)

	// Status 获取当前扫描状态
	Status() (total int, completed int, status string)

	// Close 关闭扫描器并清理资源
	Close() error
}

// ScannerConfig 定义了扫描器的配置选项
type ScannerConfig struct {
	Network   string // CIDR格式的网段
	Username  string // SSH用户名
	Password  string // SSH密码
	Threads   int    // 并发线程数
	OutputDir string // 输出目录
	Debug     bool   // 是否启用调试模式
	LogLevel  int    // 日志级别
}
